<TABLE BORDER="0" CELLPADDING="2" WIDTH="98%" BGCOLOR="white">
<TR>
<TD WIDTH="100%" BGCOLOR="yellow">
<font color="red">
NOTE: Subversion is now self-hosting -- to obtain a working copy, you
must use Subversion itself, not CVS.  Please see the <a
href="/project_source.html">Project Source</a> page for instructions on
getting a pre-packaged bootstrap distribution, and read the
<a
href="http://subversion.tigris.org/inconveniences.html">inconveniences
page</a> to learn about some temporary annoyances and their
workarounds.  Ask questions on the <a
href="/servlets/ProjectMailingListList">dev mailing list</a>, or on
IRC at <b><tt>irc.openprojects.net</tt></b>, channel
<b><tt>#svn</tt></b>.
</font>
</TD>
</TR>

<TR>
<TD WIDTH="100%" BGCOLOR="#F0F0F0" ALIGN="CENTER">
<img src="/subversion.jpg" alt="Subversion"/>
</TD>
</TR>

<TR>
<TD WIDTH="100%" BGCOLOR="#CCCC99"><STRONG><font color="000033"
FACE="Arial, Helvetica, sans-serif">
Version Control Rethought
</font></STRONG></TD>
</TR>

<TR>
<TD WIDTH="100%" HEIGHT="100" BGCOLOR="#f0f0f0">

<p>
The goal of the Subversion project is to build a version control
system that is a compelling replacement for CVS in the open source
community.  The software is released under an <a
href="/license-1.html">Apache/BSD-style</a> open source license.
See the <a href="/project_status.html">status page</a> for current
progress.  Our goals are:
</p>

<ul>  <!-- list of features -->

<li><strong>All current CVS features.</strong>
    <p>CVS is good, as far as it goes, so we want to keep
    feature-compatibility: versioning, folding of non-conflicting
    changes, detection of conflicting changes, branching, merging,
    historical diffs, log messages, line-by-line history (<tt>cvs
    annotate</tt>), etc.</p>

    <p>Generally, Subversion's conceptual interface to a particular
    feature will be as similar to CVS's as possible, except where
    there's a compelling reason to do otherwise.</p>
</li>

<li><strong>Directories, renames, and file meta-data are versioned.</strong>
    <p>Lack of these features is the most common complaint against CVS --
    basically, CVS only versions file contents.  Subversion will handle
    directory changes, file renames, and permission and other
    meta-data changes as well.</p>
</li>

<li><strong>Symbolic links, etc, are supported</strong>
    <p>Subversion will handle symbolic links ("shortcuts"), multiple hard
    links, and other special file types as long as their semantics are
    compatible with version control.</p>
</li>

<li><strong>Commits are truly atomic.</strong>
    <p>No part of a commit takes effect until the entire commit has
    succeeded.  Revision numbers are per-commit, not per-file.</p>
</li>

<li><strong>Branching and tagging are cheap (constant time) operations</strong>
    <p>There is no reason for these operations to be expensive, so they
    aren't.</p>

    <p>Branches and tags will both be implemented in terms of an
    underlying "clone" operation.  A clone is just an alias,
    optionally within the project's namespace, pointing at a specific
    revision of an existing project.  An clone takes up a small,
    constant amount of space.  All clones are tags; if you start
    committing on one, then it's a branch as well.</p>

    <p>(This does away with CVS's "branch-point tagging", by removing the
    artificial distinction that made branch-point tags necessary in
    the first place.)</p>
</li>

<li><strong>Repeated merges are handled gracefully</strong>
    <p>Subversion will have a way of remembering what has been merged, so
    that repeated merges from the same source do not require careful
    human calculation to avoid spurious conflicts (anyone who's done
    repeated CVS merges knows what we're talking about).</p>

    <p>(There are some theoretical problems with remembering merge
    sources -- knowing where the merged data came from implies some
    sort of universal repository registry.  However, our first goal is
    to make sure that multiple merges from branches made <i>in the
    same repository as the original project</i> compound gracefully.
    Remembering merges from remote sources is more difficult, due to
    the difficulty of distinguishing remote sources, but there are
    good "90%" solutions that will work in practice).</p>
</li>

<li><strong>Support for plug-in client side diff programs</strong>
    <p>Subversion knows how to show diffs for text files, and also gives
    the user the option to plug in external diff programs for any kind
    of file.  The external program need merely conform to some simple
    invocation interface (i.e., "<tt>diffprog file1 file2
    [file3...]</tt>", where the various files might be different
    revisions of the same file).</p>
</li>

<li><strong>Natively client/server</strong>
    <p> Subversion is designed to be client/server from the beginning;
    thus avoiding some of the maintenance problems which have plagued
    CVS.</p>
</li>

<li><strong>Client/server protocol sends diffs in both directions</strong>
    <p>The network protocol uses bandwidth efficiently by transmitting
    diffs in both directions whenever possible (CVS sends diffs from
    server to client, but not client to server).  The protocol will
    support compression too, of course.</p>
</li>

<li><strong>Costs are proportional to change size, not project size</strong>
    <p>In general, the time required for an Subversion operation is
    proportional to the size of the <i>changes</i> resulting from that
    operation, not to the absolute size of the project in which the
    changes are taking place.  This is a property of the Subversion
    repository model.</p>
</li>

<li><strong>Internationalization</strong>
    <p>Subversion will have I18N support -- commands, user messages, and
    errors can be customized to the appropriate human language at
    build-time.  Also, there will be I18N support for the <i>names</i>
    as well as the contents of versioned entities.

    <p><font color="blue"><strong>NOTE: Internationalization is planned,
    but may not be present in the first release.</strong></font></p>
</li>

<li><strong>Progressive multi-lingual support</strong>
    <p>In order to support keyword expansion and platform-dependent
    line-ending conversion, CVS makes a distinction between text and
    binary files, and treats the text files specially.</p>

    <p>Subversion will make the same distinction, but with a more generous
    notion of what constitutes a text file: not only ASCII, but UTF-*
    encodings of Unicode too.  Not all such encodings will be handled
    as text in the first release of Subversion, but the support will
    become more complete over time.  UTF-8 is the first priority.</p>

    <p><font color="blue"><strong>NOTE:Multi-Lingual support is planned,
    but may not be present in the first release.</strong></font></p>
</li>

</ul>  <!-- end list of features -->

<br>
</table>

<P>
